import ConfigParser
import os

if os.name == 'posix':  DIRSEP = '/'
if os.name == 'nt':     DIRSEP = '\\'
g_config = ConfigParser.RawConfigParser()
g_ready = False

def ensureObligatoryParams(config):
    if not config.has_section('main'): config.add_section('main')
    if not config.has_option('main','host'): config.set('main','host','0.0.0.0')
    if not config.has_option('main','port'): config.set('main','port','8081')
    if not config.has_option('main','root'): config.set('main','root',os.getcwd())

    if not config.has_section('msdb'): config.add_section('msdb')
    if not config.has_option('msdb','host'): config.set('msdb','host','localhost')
    if not config.has_option('msdb','port'): config.set('msdb','port','1')
    if not config.has_option('msdb','dbname'): config.set('msdb','dbname','noname')
    if not config.has_option('msdb','user'): config.set('msdb','user','anonymous')
    if not config.has_option('msdb','pwd'): config.set('msdb','pwd','')

    if not config.has_section('msapi'): config.add_section('msapi')
    if not config.has_option('msapi','url'): config.set('msapi', 'url', 'localhost')


def extendConfig(config):
    config.set('main','js',     config.get('main','root') + DIRSEP + 'js' + DIRSEP)
    config.set('main','css',    config.get('main','root') + DIRSEP + 'css' + DIRSEP)
    config.set('main','html',   config.get('main','root') + DIRSEP + 'www-data' + DIRSEP)
    config.set('main','image',  config.get('main','root') + DIRSEP + 'images' + DIRSEP)
    config.set('main','dbpath', config.get('main','root') + DIRSEP + 'db' + DIRSEP)
    if not os.path.exists(config.get('main', 'dbpath')):
        os.makedirs(config.get('main','dbpath'))

def load(path, name):
    global g_config
    g_config = ConfigParser.RawConfigParser()
    if os.path.exists(path + DIRSEP + name): g_config.read(path + DIRSEP + name)
    ensureObligatoryParams(g_config)
    extendConfig(g_config)
    return g_config

def config():
    global g_config, g_ready
    if not g_ready:
        load(os.getcwd(), 'config.cfg')
        g_ready = True
    return g_config

